home *** CD-ROM | disk | FTP | other *** search
/ Programming Languages Suite / ProgramD2.iso / Borland / Borland C++ V5.02 / STDLIB.PAK / NTHELEM.CPP < prev    next >
C/C++ Source or Header  |  1997-05-06  |  1KB  |  61 lines

  1.  #include<algorithm>
  2.  #include<vector>
  3.  
  4.  using namespace std;
  5.  
  6.  #pragma warn -aus
  7.  template<class RandomAccessIterator>
  8.  void quik_sort(RandomAccessIterator start, RandomAccessIterator end)
  9.  {
  10.    size_t dist;
  11.    distance(start, end, dist);
  12.    //
  13.    // Stop condition for recursion.
  14.    //
  15.    if(dist > 2)
  16.    {
  17.      //
  18.      // Use nth_element to do all the work for quik_sort.
  19.      //
  20.      nth_element(start, start+(dist/2), end);
  21.      //
  22.      // Recursive calls to each remaining unsorted portion.
  23.      //
  24.      quik_sort(start, start+(dist/2-1));
  25.      quik_sort(start+(dist/2+1), end);
  26.    }
  27.  
  28.    if(dist == 2 && *end < *start)
  29.      swap(start, end);
  30.  }
  31.  
  32.  int main ()
  33.  {
  34.    //
  35.    // Initialize a vector using an array of integers.
  36.    //
  37.    int arr[10] = {37, 12, 2, -5, 14, 1, 0, -1, 14, 32};
  38.    vector<int> v(arr+0, arr+10);
  39.    //
  40.    // Print the initial vector.
  41.    //
  42.    cout << "The unsorted values are: " << endl << "     ";
  43.    vector<int>::iterator i;
  44.    for(i = v.begin(); i != v.end(); i++)
  45.      cout << *i << ", ";
  46.    cout << endl << endl;
  47.    //
  48.    // Use the new sort algorithm.
  49.    //
  50.    quik_sort(v.begin(), v.end());
  51.    //
  52.    // Output the sorted vector.
  53.    //
  54.    cout << "The sorted values are: " << endl << "     ";
  55.    for(i = v.begin(); i != v.end(); i++)
  56.      cout << *i << ", ";
  57.    cout << endl << endl;
  58.  
  59.    return 0;
  60.  }
  61.